import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Tractor es la clase enemiga que aplasta animales y desruye cultivos.
 * Es una clase abstracta.
 * @author (Gabriela Alvarado) 
 * @version (mayo 2013)
 */
public abstract class Tractor extends Actor
{
    private Contador vidas;

    /**
     * Constructor. 
     */
    public Tractor(int aNumber)
    {     vidas= new Contador(aNumber);
        Greenfoot.playSound("tractor.wav");
    }

    /**
     * Este metodo es redefinido en cada una de sus subclases.
     */
    public abstract void act();

    /**
     * Cuadno encuentra un animal, lo aplasta y sigue su camino.
     */
    public void aplastar()
    {
        Actor animal=super.getOneObjectAtOffset(0,0,Animal.class);

        if(animal!=null)
        {
            World mundo;
            mundo=super.getWorld();

            mundo.removeObject(animal);
            Greenfoot.playSound("aplasta.wav");

        }
    }

    /**
     * Regresa el contador de su resistencia.
     */
    public Contador vidas()
    {
        return vidas;
    }

    /**
     * Desaparece del mundo.
     */
    public boolean muere()
    {   boolean b=false;
        if(vidas.contador()<=0)
        {   World mundo;
            mundo=super.getWorld();

            FarmWorld farmWorld = (FarmWorld) getWorld();
            farmWorld.puntos(5);
            b=true;
            mundo.removeObject(this);
        }
        return b;
    }

    /**
     * Avanza n pixeles hacia la izquierda cada vez, si llega a la coordenada o en x
     * muere.
     */
    public boolean avanza(int n)
    {
        boolean limite=false;

        World world;
        world= getWorld();
        if(world != null){
            int x = getX() - n;

            if (x <0) 
            {    getWorld().removeObject(this);
                limite=true;
                Contador contador=( (FarmWorld)world ).vidas();
                contador.decrementa(1);
            }
            else
                setLocation(x, getY());}

        return limite;

    } 

        
    
}
